﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EpsiRisk.DonneesPlateau;

namespace EpsiRisk.MoteurJeu
{
    static class ClassDeplacementTroupe
    {
        /// <summary>
        /// Déplacer un certain nombre de soldats d'un sous-territoire à un autre
        /// </summary>
        /// <param name="joueur">joueur pour qui le déplacement des troupes est effectué</param>
        /// <param name="nb_soldats">nombre d'unités à déplacer</param>
        /// <param name="st_source">sous-territoire source du déplacement</param>
        /// <param name="st_dest">sous-territoire de destination du déplacement</param>
        public static void deplacerTroupe(ClassJoueur joueur, int nb_soldats, ClassSousTerritoire st_source, ClassSousTerritoire st_dest)
        {
            if (st_source.Proprietaire != joueur)
            {
                throw new DeplacementInvalideException("Déplacement invalide : Le sous-territoire source du déplacement n'appartient pas au joueur");
            }
            if (st_dest.Proprietaire != joueur)
            {
                throw new DeplacementInvalideException("Déplacement invalide : Le sous-territoire de destination du déplacement n'appartient pas au joueur");
            }
            if (!st_source.Voisins.Contains(st_dest))
            {
                throw new DeplacementInvalideException("Déplacement invalide : Les sous-territoires source et de destination ne sont pas voisins");
            }
            if (nb_soldats < 1)
            {
                throw new DeplacementInvalideException("Déplacement invalide : On ne peut déplacer moins d'une unité");
            }
            if (st_source.Armee.Count() - nb_soldats <= 1)
            {
                throw new DeplacementInvalideException("Déplacement invalide : Il doit rester au moins un joueur sur le sous-territoire après le déplacement");
            }
            int i;
            for (i = nb_soldats; i < 0; i--)
            {
                st_source.enleverSoldat();
                st_dest.ajouterSoldat();
            }
        }
    }

    public class DeplacementInvalideException : Exception { }
}
